#include <stdio.h>
#include <stdlib.h>
#include "menu_personnel.h"
#include "modifier_per.h"
#include "Personnel.h"
#include "menu_modifier_per.h"
#define capacity 100
#include <string.h>


int comparer_cin_per(personnel *per)
{ FILE *f;
  FILE *y;
  personnel p;
  int res=0,res1=0,res2=0;
  f=fopen("fichier_personnel","ab");
  if (f!=NULL)
	{
         while((fread(&p,sizeof(personnel),1,f)!=0) && (res1==0))
 	    {
	      if(per->cin==p.cin)
	       {res1=1;}
 	    }
 	}
  y=fopen("tmp2","ab");
  if ((y!=NULL) || (res1==0))

	{
         while((fread(&p,sizeof(personnel),1,y)!=0) && (res2==0))
 	    {
	      if(per->cin==p.cin)
	       {res2=1;}
 	    }
 	}
if( (res1==1) || (res2==1))
{res=1;}
return res;
}


int test_jour_per(personnel *per)
{
	int test=0;
	if((per->date_d_embauche.mois==4)||(per->date_d_embauche.mois==6)||(per->date_d_embauche.mois==9)||(per->date_d_embauche.mois==11))
		{
		if(per->date_d_embauche.jour>30)
			{test=1;}
		}
	else if ((per->date_d_embauche.mois==2)&&(test==0))
		{
		if(per->date_d_embauche.jour>29)
			{test=1;}
		}
	else
		if(per->date_d_embauche.jour>31)
			{test=1;}
return test;
}


int longueur_per(int valeur)
{
	int l= 0;

	while(valeur !=0)
	{
		l++;
		valeur = valeur / 10;
	}
 return l;
}

void saisir_personnel(personnel *per,char tmp2[],char fichier[])
{
int res2=0;
int res=0;
int res1=0;
int res3=0;
FILE *y;
FILE *f;
personnel p;
int valeur;
int c_cin=0;
int test_j=0;
int l=0;
int l2=0;
char ch_sexe1[20]= "masculin";
char ch_sexe2[20]= "feminin";
char ch_poste1[20]= "medecin";
char ch_poste2[20]= "infirmier";

do {
printf("Saisir CIN \n");
scanf("%ld",&per->cin);
c_cin=comparer_cin_per(per);
l=longueur_per(per->cin);
}
while ((l!=8) || (per->cin <0) || (c_cin==1));
printf("Saisir Nom \n");fflush(stdin);
scanf("%s",per->nom);
printf("Saisir Prenom \n");fflush(stdin);
scanf("%s",per->prenom);
do
{
printf("Saisir Age \n");
scanf("%d",&per->age);
} while ((per->age<0)||(per->age>100));
do
{
printf("Choisir sexe: feminin/masculin \n");fflush(stdin);
scanf("%s",per->sexe);
} while ((strcmp(per->sexe,ch_sexe1)!=0)&&(strcmp(per->sexe,ch_sexe2)!=0));
do {
printf("Saisir Numero de telephone \n");
scanf("%ld",&per->numero_telephone);
l=longueur_per(per->numero_telephone);
}
while ((per->numero_telephone<0) || (l!=8));
printf("Saisir adresse \n");fflush(stdin);
scanf("%s",per->adresse);

do {
res=0;
res1=0;
res2=0;
res3=0;
printf("Saisir identifiant ID \n");
scanf("%d",&per->ID);
l=longueur_per(per->ID);
y=fopen("tmp2.txt","a+");
	if (y!=NULL){
  		while(fread(&p,sizeof(personnel),1,y)!=0 && res1==0)
		{
		if(per->ID==p.ID)
		res1=1;
 		}
	}
f=fopen(fichier,"rb");
  if (f!=NULL){
  while(fread(&p,sizeof(personnel),1,f)!=0 && res==0)
	{
	if(per->ID==p.ID)
	res=1;
 	}
  }
if((res==1)||(res1==1)){
printf("ID deja existe\n");
res2=1;}
 
if((per->ID<0) || (l!=5)){
res3=1;
printf("ID incorrect\n");
}
}
while (res3==1 || res2==1);
do
{
printf("Choisir le poste: medecin/infirmier \n");fflush(stdin);
scanf("%s",per->poste);
} while ((strcmp(per->poste,ch_poste1)!=0)&&(strcmp(per->poste,ch_poste2)!=0));
do {
printf("Donnez la date d'embauche: jour mois annee \n");
scanf("%d %d %d",&(per->date_d_embauche.jour),&(per->date_d_embauche.mois),&(per->date_d_embauche.annee));
l2=longueur_per(per->date_d_embauche.annee);
test_j=test_jour_per(per);
}
while ((per->date_d_embauche.jour<=0)||(per->date_d_embauche.mois<=0)||(per->date_d_embauche.mois>12)||(per->date_d_embauche.annee<=0)||(l2!=4)||(test_j==1));

}

void enregistrer_personnel(char fichier[], personnel *per,char tmp2[])
{
   saisir_personnel(per,tmp2,fichier);
  FILE *f;
  f=fopen(fichier,"ab");
  if (f!=NULL){
  fwrite(per,sizeof(personnel),1,f);}
  fclose(f);
}

void lister_personnel(char fichier[])
{
FILE *f;
personnel p;
int i=1;  
  f=fopen(fichier,"rb");
  if (f!=NULL){
  while(fread(&p,sizeof(personnel),1,f)!=0)
{printf("\n Personnel n:%d \n ID= %d \n CIN= %ld \n Nom=  %s \n Prenom= %s \n Age= %d \n Sexe= %s \n Num_tel= %ld \n Adresse= %s \n  poste= %s \n Date_d'embauche = : %d %d %d \n \n ",i,p.ID,p.cin,p.nom,p.prenom,p.age,p.sexe,p.numero_telephone,p.adresse,p.poste,
p.date_d_embauche.jour,p.date_d_embauche.mois,p.date_d_embauche.annee);
 i++;}} fclose(f);
}

int chercher_personnel(char fichier[],char nom[],int ID)
{
    int res=0;
  FILE *f;
  personnel p;
  printf("Donner le nom cherché \n");
  scanf ("%s",nom);
  printf("Donner son ID \n");
  scanf ("%d",&ID);
  f=fopen(fichier,"rb");
  if (f!=NULL){
  		while(fread(&p,sizeof(personnel),1,f)!=0 && res==0)
			{
			if((strcmp(p.nom,nom)==0)&&(ID==p.ID))
				{res=1;}
			 }
		}
if (res==1)
 {printf("\nID= %d \n CIN= %ld \n Nom=  %s \n Prenom= %s \n Age= %d \n Sexe= %s \n Num_tel= %ld \n Adresse= %s \n  poste= %s \n Date_d'embauche = : %d %d %d \n \n ",p.ID,p.cin,p.nom,p.prenom,p.age,p.sexe,p.numero_telephone,p.adresse,p.poste,
p.date_d_embauche.jour,p.date_d_embauche.mois,p.date_d_embauche.annee);}
 fclose(f);
  return res;
}

void supprimer_personnel( char fichier[])
{
char tmp2[]="tmp2.txt";
int i=0;
char tmp[]="tmp.txt";
FILE *f ;
FILE *t ;
FILE *y ;
personnel p;
int ID;
printf("\n Donner l'ID du personnel que vous voulez supprimer:\n");
scanf("%d", &ID);
f=fopen(fichier,"rb") ;
t=fopen(tmp,"wb") ;
y=fopen(tmp2,"a+") ;
if (f!= NULL && t!=NULL )
	{
	while(fread(&p,sizeof(personnel),1,f)!=0)
		{
			if( ID!=p.ID)
				{ fwrite(&p,sizeof(personnel),1,t);}
			if (ID==p.ID)
				{fwrite(&p,sizeof(personnel),1,y);}
		}

	}
fclose(y) ;
printf("Le personnel est supprimé\n");
fclose(f) ;
fclose(t) ;
f=fopen(fichier,"wb") ;
t=fopen(tmp,"rb") ;
while(fread (&p,sizeof(personnel),1,t)!=0)
{fwrite(&p,sizeof(personnel),1,f) ;}
fclose(f) ;
fclose(t) ;
}

void afficher_archive_per(char tmp2[]){

FILE *y;
personnel p;
int i=1;  
  y=fopen("tmp2.txt","a+");
  if (y!=NULL){
  printf("\n *** Archive du Personnel ***\n");
  while(fread(&p,sizeof(personnel),1,y)!=0)
{printf("\n Personnel n:%d \n ID= %d \n CIN= %ld \n Nom=  %s \n Prenom= %s \n Age= %d \n Sexe= %s \n Num_tel= %ld \n Adresse= %s \n  poste= %s \n Date_d'embauche = : %d %d %d \n \n ",i,p.ID,p.cin,p.nom,p.prenom,p.age,p.sexe,p.numero_telephone,p.adresse,p.poste,
p.date_d_embauche.jour,p.date_d_embauche.mois,p.date_d_embauche.annee);
 i++;}} fclose(y);
}

void init_personnels(char fichier[])
{	
 	FILE *f;
 	f=fopen(fichier,"wb");
 	fclose(f);
}


void gestion_personnel() {
	personnel p[capacity];
	int n=0;
	int choix;
	char fichier[capacity]="fichier_personnel";
	char nom[30];
	int res;
	int ID;
	char tmp2[capacity]="tmp2.txt";
do {
afficher_menu_per();
choix=choix_menu_per();


	switch (choix) {
	case 1: 
  	enregistrer_personnel(fichier,p,tmp2);
	break;
	case 2:
	lister_personnel(fichier);
	break;
	case 3:
	res=chercher_personnel(fichier,nom,ID);
	if (res==1)
	{printf("Le personnel %s existe \n",nom);}
	else {printf("Le personnel %s n'existe pas \n",nom);}
	break;
	case 4: supprimer_personnel(fichier);
	break;
	case 5: modifier_personnel();
	break;
	case 6: init_personnels(fichier);
	printf("Personnels initialisés");
	break;
	case 7: afficher_archive_per(tmp2);
	break;
	case 0:  printf("\n Retour au menu principal \n");break; break;
	default: printf("\n Mauvais choix \n");}
}while (choix!=0);
}

